package com.ai.faceCompare.domain.dto;

/**
 * ClassName:    XfFaceRequestDTO
 * Description:  TODO
 * Author:       yuzx
 * Date:         2025/9/7 18:37
 * Version:      1.0
 **/
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 讯飞人脸比对API请求DTO（按讯飞接口格式组装参数）
 */
public class XfFaceRequestDTO {

    /**
     * 讯飞API整体请求体（header + parameter + payload）
     */
    @Data
    public static class RequestBody {
        private XfHeader header;
        private XfParameter parameter;
        private XfPayload payload;
    }

    /**
     * 平台参数（header）：讯飞要求的基础配置
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class XfHeader {
        @JsonProperty("app_id") // 与讯飞接口字段一致（下划线命名）
        private String appId;

        private Integer status = 3; // 固定值3：一次性传递完整数据
    }

    /**
     * 功能参数（parameter）：人脸比对业务配置
     */
    @Data
    public static class XfParameter {
        // 与讯飞service-id一致（固定s67c9c78c）
        @JsonProperty("s67c9c78c")
        private XfInputAcp inputAcp;

        /**
         * 子参数：输入配置
         */
        @Data
        public static class XfInputAcp {
            @JsonProperty("service_kind") // 业务类型：固定face_compare（人脸1:1比对）
            private String serviceKind = "face_compare";

            @JsonProperty("face_compare_result") // 结果返回配置
            private XfResultConfig faceCompareResult;

            /**
             * 结果返回格式配置
             */
            @Data
            @NoArgsConstructor
            @AllArgsConstructor
            public static class XfResultConfig {
                private String encoding = "utf8"; // 编码：固定utf8
                private String compress = "raw"; // 压缩：固定raw（不压缩）
                private String format = "json"; // 格式：固定json
            }
        }
    }

    /**
     * 数据参数（payload）：图片Base64和编码
     */
    @Data
    public static class XfPayload {
        @JsonProperty("input1") // 第一张图片
        private XfImage input1;

        @JsonProperty("input2") // 第二张图片
        private XfImage input2;

        /**
         * 图片数据模型
         */
        @Data
        @NoArgsConstructor
        @AllArgsConstructor
        public static class XfImage {
            private String encoding; // 图片编码（前端传递：jpg/png等）
            private Integer status = 3; // 固定值3：一次性传递
            private String image; // 图片Base64（无前缀）
        }
    }
}